# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time      :2022/8/3 0003 23:33
# @Author    :jiaxuesong

'''
查找测试用例，生成测试套件
    unittest.TestLoader()/unittest.defaultTestLoader()
    实例化testloader()类
    调用discover方法生成测试套件
    返回测试套件

运行测试套件，生成测试报告
    创建测试报告名及路径
    以写入模式打开文件
    实例化HTMLTestRunner得到一个runner对象
    调用实例方法执行测试用例
    关闭文件

清理报告
    方案二：保留最新的N个
        os.dirlist()获取某个文件下全部文件
        得到一个列表
        循环删除每一个文件os.remove
'''

# 导包
import os
import unittest
import time
import HTMLTestRunner
from common.sendEmail import SendEmail

# 查找测试用例，生成测试套件
def creat_suit():
    # 获取用例存放路径
    case_list = os.path.dirname(__file__) + r'/testCase/'
#     unittest.TestLoader()/unittest.defaultTestLoader()
#     实例化testloader()类
    print(case_list)
    load = unittest.TestLoader()
#     调用discover方法生成测试套件
    suit = load.discover(start_dir=case_list, pattern='test*.py')
#     返回测试套件
    return suit

# 清理报告
def clear_report():
#     方案二：保留最新的N个
    # 获取测试报告保存路径
    report_path = os.path.dirname(__file__) + r'/testReport/'
#         os.dirlist()获取某个文件下全部文件
    file_list = os.listdir(report_path)
#         得到一个列表
#         循环删除每一个文件os.remove
    for i in file_list[:-3]:
        if '*.html' in i:
            os.remove(report_path + i)


def run_suit():
    # 清理测试报告
    clear_report()
# 运行测试套件，生成测试报告
    suit = creat_suit()
#     创建测试报告名及路径
    t = time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime())
    report_file = os.path.dirname(__file__) + r'/testReport/' + t + '.html'
#     以写入模式打开文件
    with open(report_file, 'wb') as fp:
#     实例化HTMLTestRunner得到一个runner对象
        runner = HTMLTestRunner.HTMLTestReportCN(stream=fp, verbosity=2, title='接口自动化测试报告', description='自动化测试结果')
#     调用实例方法执行测试用例
        runner.run(suit)
    # 测试报告生成成功后，调用发送邮件方法发送邮件
    # SendEmail.send_email(report_file)

if __name__ == '__main__':
    unittest.main(verbosity=2)

